package component;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.io.IOException;

import data.Users;
import network.HttpServerErrors;
import util.UnstackableToast;
import util.http.HttpPostConnector;
import winapi251.app.fortpolio.R;

/**
 * 로그인 (메인) 액티비티
 */
public class LoginActivity extends Activity
{
	private static final String LOG_TAG = "WAFortpolio_component.LoginActivity";
	private EditText editEmail;
	private EditText editPassword;

	/**
	 * 앱의 시작점
	 * 로그인 액티비티가 생성될 때 호출되는 메서드
	 * @param savedInstanceState : 저장되어 있던 인스턴스 상태
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_login);

		// 쌓이지 않는 토스트를 초기화한다.
		UnstackableToast.Initialize(this);

		// 사용자 정보를 초기화한다.
		Users.initialize(this);

		// 사용자의 아이디와 비밀번호가 저장되어 있으면
		if (Users.getInstance().isLoginDataExist())
		{
			// 메인 액티비티로 이동한다.
			gotoMain();
			return;
		}

		// 레이아웃에 있는 뷰들을 불러온다.
		editEmail = (EditText) findViewById(R.id.edit_email);
		editPassword = (EditText) findViewById(R.id.edit_password);
	}

	/**
	 * 로그인 액티비티의 버튼을 눌렀을 때 호출되는 메서드
	 * @param view : 눌린 버튼
	 */
	public void onClick(View view)
	{
		switch (view.getId())
		{
		case R.id.btn_login: // 로그인 버튼
			final String email = editEmail.getText().toString();
			final String password = editPassword.getText().toString();

			try
			{
				if (email.equals(""))
					throw new Exception("이메일");

				else if (password.equals(""))
					throw new Exception("비밀번호");
			}
			catch (Exception exception)
			{
				UnstackableToast.show(exception.getMessage() + "을 입력해주세요.", Toast.LENGTH_LONG);
				return;
			}

			new Thread()
			{
				@Override
				public void run()
				{
					String html = null;

					try
					{
						HttpPostConnector connector = new HttpPostConnector("http://contest.iwop.net/2013/fortpolio/mobile_login.php");
						html = connector.request(
								"loginEmail", email,
								"loginPwd", password);
						Log.i(LOG_TAG, html);

						// 서버와 통신하는 중 발생한 오류를 처리한다.
						int errorCode = Integer.parseInt(html);
						switch (errorCode)
						{
						case HttpServerErrors.UNCORRECT_DATA:
							throw new Exception("아이디나 비밀번호가 틀렸습니다.");

						case HttpServerErrors.FORBIDDEN:
							throw new Exception("잘못된 접근입니다.");
						}

//						html = connector.request("http://contest.iwop.net/2013/fortpolio/home.php");
//						List<Cookie> cookies = connector.geztCookies();
//						Log.v(LOG_TAG, cookies.get(0).getValue());
//						Log.i(LOG_TAG, html);
					}

					catch (IOException e)
					{
						Log.v(LOG_TAG, "네트워크 IOException 발생!");
						// TODO 이거 내용 토스트로 띄우기
					}

					// 오류가 없으면
					catch (NumberFormatException numberFormatException)
					{
						Log.v(LOG_TAG, html);

						// 사용자의 아이디와 비밀번호를 저장하고
						Users.getInstance().saveLoginData(email, password);

						// 메인 액티비티로 이동한다.
						gotoMain();
					}

					// 서버와 통신하던 중 발생한 예외처리 코드
					catch (Exception execption)
					{
						UnstackableToast.show(execption.getMessage(), Toast.LENGTH_LONG);
					}
				}
			}.start();
			break;

		case R.id.btn_find_password: // 비밀번호 찾기 버튼
			// 비밀번호 찾기 액티비티를 띄운다.
			startActivity(new Intent(this, FindPasswordActivity.class));
			break;

		case R.id.btn_join: // 회원가입 버튼
			// 회원가입 액티비티를 띄운다.
			startActivity(new Intent(this, JoinActivity.class));
			break;
		}
	}

	/**
	 * 메인 페이지로 이동하는 메서드
	 */
	private void gotoMain()
	{
		// 메인 액티비티로 이동한다.
		finish();
		startActivity(new Intent(this, MainActivity.class));
	}
}